'''
生成器 generator
'''
# (1,4,9,16,25,36)

# 生成一个元组 - 保存的是数据本身
r = tuple([i*i for i in range(1,7)])
print(r) # (1, 4, 9, 16, 25, 36)
for i in r:
    print(i)

# 生成器 - 保存的是生产数据的规则 - 节省空间
r = (i*i for i in range(1,7))
print(r) # <generator object <genexpr> at 0x0000000001DE7B30>
for i in r:
    print(i)

import time

# 利用函数来制造生成器
def nature():
    n = 0
    while True:
        # print(n)
        # yiled 的作用有2个
        # 1. 返回n 的值，相当于return，但是不会结束程序
        # 2. 暂停程序的执行
        yield n 
        n += 1
        time.sleep(0.5)

s = nature()
print(s)

print(next(s))
print(next(s))

for i in s:
    print(i)